package Chapter8;
//163页程序8.4

import java.awt.event.*;
import javax.swing.*;

class JButtonExample extends WindowAdapter implements ActionListener {
    //Example示例  Action行为，装置  ActionListener监听器，接口  WindowAdapter适配器（实现接口的类，免手动实现）
    JFrame f; //框架
    JButton b; //
    JTextField tf; //文本框 JLabel是只显示不可改变的文本框
    int tag = 0; //按钮点击计数

    public static void main(String[] args) {
        JButtonExample be = new JButtonExample(); //Example范例
        be.go(); //该类调用自己的成员方法
    }

    public void go() {
        f = new JFrame("按钮范例程序"); //带标题的框架，默认不可见
        b = new JButton("简单按钮"); //带文本的按钮
        b.addActionListener(this); //将按钮添加到当前对象的ActionListener监听程序里，this代指实现了接口的类的对象，此处就是be实例对象
        f.getContentPane().add(b, "South"); //获取frame内容窗格，将按钮添加进去，位置在内容窗格南部即下面
        tf = new JTextField(); //创建可变文本框
        f.getContentPane().add(tf, "Center"); //同上，位置在内容窗格中间
        f.addWindowListener(this); //将框架添加到当前对象的WindowListener监听程序里  监听窗口关闭
        f.setSize(300, 150); //框架大小
        f.setVisible(true); //框架可见
    }

    public void actionPerformed(ActionEvent e) {
        //实现ActionListener接口的唯一的抽象方法actionPerformed，表示监听按钮
        //ActionEvent指当前监听程序监听某些事件，这些事件发生，会产生对应的事件对象e，然后激活对应的方法进行执行
        String s1 = "你点击了这个按钮！";
        String s2 = "你再次点击了这个按钮！";
        if (tag == 0) {
            tf.setText(s1); //让编辑文本框显示字符串s1的内容
            tag = 1;
        } else {
            tf.setText(s2);
            tag = 0;
        }
    }

    public void windowClosing(WindowEvent e) {
        //实现了WindowAdapter适配器的抽象方法，表示关闭程序
        //windowAdapter适配器是实现对应接口windowListener的类，但实现的方法是什么都不写，所以此处要重写
        //之所以使用适配器，而不是直接实现接口是因为有些接口的抽象方法较多，但只用到其中一部分，由于接口的方法要全部实现，因此使用适配器假装“实现”，用到哪个方法则直接重写方法
        System.exit(0);
    }
}
